// cf-498d
// 题意：有n+1(n<=10^5)个城市排成一排，从左到右标号为i，然后第i个城市与
//       i+1个城市之间有一个正整数ai。如果某个时刻t，你在某个城市i，
//       若t是ai的倍数，那么你需要在原地等即t=t+1，如果不是那么你可以
//       走到下一个城市即i=i+1, t=t+1。
//       现在有q(<=10^5)个操作，询问是一对(x, y)(x<y)，你要回答0时刻从
//       x城市出发，到达y城市最少的时间。然后还有修改，即修改某个ai为
//       另一个值。保证所有ai一直在[2, 6]的范围。
//
// 题解：2到6的最小公倍数是60, 所以弄60个线段树，tree[60][maxn * 4]，
//       对于起始时间t，然后对于某个区间[l, r]，线段树维护的就是t时间
//       开始，从l到r花费最少的时间。
//
//       这题有意思就在于这个状态是在线段树上，转移也是在线段树上转移。
//
// run: $exec < input
#include <iostream>

int const maxn = 100007;
int tree[66][maxn * 4];
int a[maxn];
int n, m;

void init_tree(int id, int l, int r)
{
	if (l >= r) return;
	int mid = (l + r) / 2;
	init_tree(id * 2, l, mid);
	init_tree(id * 2 + 1, mid + 1, r);
	for (int i = 0; i < 60; i++) {
		int t = tree[i][id * 2];
		if ((t + i) % a[mid]) t++;
		else t += 2;
		tree[i][id] = t + tree[(t + i) % 60][id * 2 + 1];
	}
}

int query(int id, int l, int r, int tl, int tr, int start)
{
	if (tl <= l && r <= tr)
		return tree[start][id];
	int mid = (l + r) / 2;
	if (tr <= mid) return query(id * 2, l, mid, tl, tr, start);
	else if (tl > mid) return query(id * 2 + 1, mid + 1, r, tl, tr, start);
	else {
		int t1 = query(id * 2, l, mid, tl, tr, start);
		if ((t1 + start) % a[mid]) t1++;
		else t1 += 2;
		int t2 = query(id * 2 + 1, mid + 1, r, tl, tr, (t1 + start) % 60);
		return t1 + t2;
	}
}

void update(int id, int l, int r, int p, int d)
{
	if (p == l && p == r) { a[p] = d; return; }
	int mid = (l + r) / 2;
	if (p <= mid) update(id * 2, l, mid, p, d);
	else update(id * 2 + 1, mid + 1, r, p, d);
	for (int i = 0; i < 60; i++) {
		int t = tree[i][id * 2];
		if ((t + i) % a[mid]) t++;
		else t += 2;
		tree[i][id] = t + tree[(t + i) % 60][id * 2 + 1];
	}
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	init_tree(1, 1, n + 1);
	std::cin >> m;
	for (int i = 0, x, y; i < m; i++) {
		char opt; std::cin >> opt;
		if (opt == 'A') {
			std::cin >> x >> y;
			std::cout << query(1, 1, n + 1, x, y, 0) << '\n';
		} else {
			std::cin >> x >> y;
			update(1, 1, n + 1, x, y);
		}
	}
}

